package main

import (
	"fmt"
	"time"
)

func main() {
	intchan := make(chan int, 1)
	go func() {
		intchan <- 10
	}()

	stringchan := make(chan string, 1)
	go func() {
		time.Sleep(time.Second)
		stringchan <- "hellogolang"
	}()

	select {
	case v := <-intchan:
		fmt.Println("intchan:", v)
	case v := <-stringchan:
		fmt.Println("stringchan:", v)
	}
}

//var ch chan<- int 只写
//var ch <-chan int 只读

// import (
// 	"fmt"
// 	"sync"
// )

// var tasks chan int
// var wg sync.WaitGroup

// func test(i int) {
// 	defer wg.Done()
// 	for len(tasks) > 0 {
// 		t := <-tasks
// 		fmt.Printf("%d get %d task\n", i, t)
// 	}
// }

// func main() {
// 	tasks = make(chan int, 10)
// 	for i := 0; i < 10; i++ {
// 		tasks <- i
// 	}

// 	close(tasks)

// 	for value := range tasks {
// 		fmt.Println(value)
// 	}

// 	// wg.Add(2)
// 	// go test(1)
// 	// go test(2)

// 	//wg.Wait()
// }

// func main() {
// 	tasks := make(chan int, 5)
// 	var num int
// 	tasks <- 10
// 	tasks <- num

// 	for len(tasks) > 0 {
// 		t := <-tasks
// 		fmt.Println(t)
// 	}
// 	close(tasks)
// }

//协程等待与互斥锁的使用
// import (
// 	"fmt"
// 	"sync"
// )

// var i int
// var wg sync.WaitGroup
// var lock sync.Mutex

// func getticket() {
// 	defer wg.Done()
// 	for i <= 100 {
// 		lock.Lock()
// 		if i <= 100 {
// 			i++
// 			fmt.Println("get ticket", i)
// 			//time.Sleep(time.Second / 2)
// 		}
// 		lock.Unlock()
// 	}
// }

// func main() {
// 	wg.Add(2)
// 	go getticket()
// 	go getticket()

// 	wg.Wait()
// }
